لقد كنت أعبث مع JSON لبعض الوقت ، فقط أدفعها كنص ولم تؤذي أي شخص (أعرفه) ، لكني أود أن أبدأ في فعل الأشياء بشكل صحيح. لقد رأيت الكثير من "المعايير" المزعومة لنوع محتوى JSON: التطبيق / json التطبيق / x- جافا سكريبت نص / جافا سكريبت نص / x- جافا سكريبت نص / x-json لكن أيهما هو الصحيح أم الأفضل؟ أعلم أن هناك مشكلات متعلقة بالأمان ودعم المتصفح تختلف فيما بينها. أعلم أن هناك سؤالًا مشابهًا ، ما هو نوع MIME إذا تم إرجاع JSON بواسطة واجهة برمجة تطبيقات REST؟ ولكني أرغب في الحصول على إجابة أكثر استهدافًا.
2020-12-07 21:15:21
1 2 التالى لنص JSON: التطبيق / json نوع وسائط MIME لنص JSON هو application / json. الترميز الافتراضي هو UTF-8. (المصدر: RFC 4627). بالنسبة لـ JSONP (JavaScript قابل للتشغيل) مع رد الاتصال: التطبيق / جافا سكريبت فيما يلي بعض منشورات المدونة التي تم ذكرها في التعليقات ذات الصلة: لماذا لا يجب عليك استخدام text / html لـ JSON يواجه Internet Explorer أحيانًا مشكلات في التطبيق / json قائمة كاملة إلى حد ما من Mimetypes وما يجب استخدامها قائمة أنواع Mime الرسمية في IANA من إجابة @ gnrfan أدناه | سجلت IANA نوع MIME الرسمي لـ JSON كتطبيق / json. عندما سُئل عن سبب عدم استخدام text / json ، يبدو أن Crockford قد قال إن JSON ليس في الواقع JavaScript ولا نصًا ، كما أن IANA كان من المرجح أن يوزع التطبيق / * من النص / *. المزيد من الموارد: أنواع الوسائط طلب التعليقات 4627 bluesmoon: JSON له نوع | بالنسبة إلى JSON: نوع المحتوى: application / json بالنسبة إلى JSON-P: نوع المحتوى: تطبيق / جافا سكريبت | بالطبع ، نوع وسائط MIME الصحيح لـ JSON هو application / json ، لكن من الضروري معرفة نوع البيانات المتوقع في تطبيقك. على سبيل المثال ، أستخدم Ext GWT ويجب أن تكون استجابة الخادم نصًا / html ولكنها تحتوي على بيانات JSON. جانب العميل ، مستمع شكل Ext GWT uploadForm.getForm (). addListener (جديد FormListenerAdapter () { @تجاوز public void onActionFailed (Form form، int httpStatus، String responseText) { MessageBox.alert ("خطأ") ؛ } @تجاوز public void onActionComplete (Form form، int httpStatus، String responseText) { MessageBox.alert ("نجاح") ؛ } }) ؛ في حالة استخدام نوع استجابة application / json ، يقترح المتصفح لي حفظ الملف. مقتطف شفرة المصدر من جانب الخادم باستخدام Spring MVC إرجاع AbstractUrlBasedView الجديد () { SuppressWarnings ("غير محدد") @تجاوز عرض باطل محمي MergedOutputModel (نموذج الخريطة ، طلب HttpServletRequest ، HttpServletResponse response) يطرح استثناء { response.setContentType ("text / html") ؛ response.getWriter (). write (json) ؛ } } ؛ | جسون: الاستجابة هي بيانات يتم إنشاؤها ديناميكيًا ، وفقًا لمعلمات الاستعلام التي تم تمريرها في عنوان URL. مثال: {"الاسم": "فو" ، "المعرّف": 1234 ، "الترتيب": 7} نوع المحتوى: application / json JSON-P: JSON مع حشوة. الاستجابة هي بيانات JSON ، مع ملف استدعاء دالة حولها. مثال: functionCall ({"Name": "Foo"، "Id": 1234، "Rank": 7})؛ نوع المحتوى: تطبيق / جافا سكريبت | إذا كنت تستخدم Ubuntu أو Debian وتخدم ملفات .json من خلال Apache ، فقد ترغب في تقديم نوع المحتوى الصحيح للملفات. أفعل هذا في المقام الأول لأنني أريد استخدام امتداد Firefox JSONView ستساعد وحدة Apache mod_mime على القيام بذلك بسهولة. ومع ذلك ، مع Ubuntu ، تحتاج إلى تحرير الملف /etc/mime.types وإضافة السطر التطبيق / json json ثم أعد تشغيل Apache: إعادة تشغيل sudo خدمة apache2 | إذا كنت تتصل بـ ASP.NET Web Services من جانب العميل ، فيجب عليك استخدام application / json حتى يعمل. أعتقد أن هذا هو نفسه بالنسبة لإطار عمل jQuery و Ext. | نوع المحتوى المناسب لـ JSON هو application / json ما لم تكن تستخدم JSONP ، والمعروف أيضًا باسم JSON with Padding ، وهو في الواقع JavaScript وبالتالي فإن نوع المحتوى المناسب هو application / javascript. | ليس هناك شك في أن application / json هو أفضل نوع MIME لاستجابة JSON. لكن كان لدي بعض الخبرة حيث كان علي استخدام application / x-javascript بسبب بعض مشكلات الضغط. بيئة الاستضافة الخاصة بي هي استضافة مشتركة مع GoDaddy. لا يسمحون لي بتغيير تكوينات الخادم. لقد أضفت الكود التالي إلى ملف web.config لضغط الاستجابات.<اسم المخطط = "gzip" dll = "٪ Windir٪ \ system32 \ inetsrv \ gzip.dll" /> باستخدام هذا ، تم ضغط صفحات .aspx باستخدام g-zip لكن استجابات JSON لم تكن كذلك. أضفت في أقسام الأنواع الثابتة والديناميكية. لكن هذا لا يضغط على استجابات JSON على الإطلاق. بعد ذلك أزلت هذا النوع المضاف حديثًا وأضفته في كل من أقسام الأنواع الثابتة والديناميكية ، وتغيير نوع الاستجابة في .ashx (معالج غير متزامن) إلى التطبيق / x- جافا سكريبت والآن وجدت أن استجابات JSON الخاصة بي مضغوطة باستخدام g-zip. لذلك أنا شخصيا أوصي باستخدامه التطبيق / x- جافا سكريبت فقط إذا كنت تريد ضغط استجابات JSON في بيئة استضافة مشتركة. لأنه في الاستضافة المشتركة ، لا يسمحون لك بتغيير IISالتكوينات. | فقط عند استخدام application / json كنوع MIME ، لدي ما يلي (اعتبارًا من نوفمبر 2011 مع أحدث إصدارات Chrome ، Firefox مع Firebug): لا مزيد من التحذيرات من Chrome عند تحميل JSON من الخادم. سيضيف Firebug علامة تبويب للاستجابة تعرض لك بيانات JSON منسق. إذا كان نوع MIME مختلفًا ، فسيظهر كملف "محتوى الاستجابة". | لا يعمل كل شيء مع نوع المحتوى application / json. إذا كنت تستخدم نموذج Ext JS للإرسال لتحميل الملف ، فاعلم أن استجابة الخادم يتم تحليلها بواسطة المستعرض لإنشاء مستند لـ